#!/usr/bin/env python
# -*- coding:utf-8 -*-

# file:grammar.py
# author:邹煜扬
# datetime:2024/12/17 17:13
# software: PyCharm
"""
保存文法的数据结构的定义
"""
# import module your need
from .production import Production

class Grammar:
    def __init__(self):#全部定义为空
        self.VN = []  # 非终结符集合
        self.VT = []  # 终结符集合
        self.P = []  # 产生式集合
        self.S = ''  # 开始符号

    def add_production(self,left,right):
        production= Production(left,right)
        self.P.append(production)#添加产生式
        if left not in self.VN:#如果左部不在VN集中
            self.VN.append(left)#更新非终结符号集
        for symbol in right:#更新终结符号集
            if symbol.isupper() is False and symbol not in self.VT:#不是大写字母且不在VT集中
                self.VT.append(symbol)

    def set_start_symbol(self,symbol):#设置开始符号
        self.S = symbol

    def expand_grammar(self):#扩展文法
        production = Production(self.S+"'", self.S)
        self.P.insert(0,production)#添加产生式到第一个位置

    def get_all_symbols(self):
        return self.VN+self.VT

    def __str__(self):
        for production in self.P:
            print(production)
        return ''#额外返回一个空字符串，防止typeError
